home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / networke / civ-0.000 / civ-0 / civ-0.3 / src / array.h < prev    next >
C/C++ Source or Header  |  1995-02-09  |  1KB  |  62 lines

  1. #ifndef _ARRAY_H
  2. #define _ARRAY_H
  3.  
  4. #include <string.h>
  5.  
  6. // for efficiency we allow only 3 dimensional arrays, should be more
  7. // than enough and not hard to change, I could use variable argument
  8. // lists but that is not fast enough
  9. template<class T>
  10. class Array
  11. {
  12. public:
  13.   Array() {
  14.     sizes[0] = sizes[1] = sizes[2] = 0;
  15.     ptr = NULL;
  16.   }
  17.   Array(long dim1, long dim2 = 1, long dim3 = 1) {
  18.     sizes[0] = dim1; sizes[1] = dim1*dim2; sizes[2] = sizes[1]*dim3;
  19.     ptr = new T[sizes[2]];
  20.   }
  21.   ~Array() { delete [] ptr; }
  22.  
  23.   T &operator ()(long dim1) { return *(ptr+dim1); }
  24.  
  25.   T &operator ()(long dim1, long dim2) {
  26.     return *(ptr+dim1+dim2*sizes[0]);
  27.   }
  28.  
  29.   T &operator ()(long dim1, long dim2, long dim3) {
  30.     return *(ptr+dim1+dim2*sizes[0]+dim3*sizes[1]);
  31.   }
  32.  
  33.   // resize will destroy the arrays current contents so use it
  34.   // carefully
  35.   void Resize(long dim1, long dim2 = 1, long dim3 = 1) {
  36.     delete [] ptr;
  37.     sizes[0] = dim1; sizes[1] = dim1*dim2; sizes[2] = sizes[1]*dim3;
  38.     ptr = new T[sizes[2]];
  39.   }
  40.  
  41.   // relinquishes ownership of the array
  42.   T *GetArray() {
  43.     T *ptr1 = ptr;
  44.     sizes[0] = sizes[1] = sizes[2] = 0;
  45.     ptr = NULL;
  46.     return ptr1;
  47.   }
  48.  
  49.   void CopyFrom(T *src)
  50.   { memcpy(ptr, src, (unsigned)Size()); }
  51.  
  52.   T *GetFirst() { return ptr; }
  53.  
  54.   long Size() { return sizes[2]*sizeof(T); }
  55.  
  56. private:
  57.   T *ptr;
  58.   long sizes[3];
  59. };
  60.  
  61. #endif
  62.